Automatikus email küldés Scrollból: CDO.Message segítségével | ScrollMAX

Automatikus email küldés Scrollból: CDO.Message segítségével

A küldő felületről


A ScrollMax rendszer ütemezett feladatok segítségével tud automatikus email küldési funkciókat megvalósítani.

Ehhez a Microsoft Windows CDO könyvtárát használja fel, abból is a CDO.Message interfészt:

https://msdn.microsoft.com/en-us/library/ms872547%28v=exchg.65%29.aspx

Ez a felület a példányosítás után szabványos COM objektumot generál, amelynek SMTP parancsait és opcióit több programnyelvből is el lehet érni (pl. VBScript).
Így egy rendszergazda a Scroll használata nélkül is le tudja próbálni a szükséges beállításokat.

Hogy a beállítást a nyomda és rendszergazdák számára megkönnyítsük, egy CDO_Teszter nevű programot szoktunk a szervereken elhelyezni (vagy kérésre odaadni), amelyben a legfőbb mezőket be lehet paraméterezni, és anélkül próbálni, hogy közben a Scroll programokat futtatnánk.
Legfőbb paraméterek: SMTP szerver cím, port, protokoll, küldő felhasználó neve és jelszava, küldő és feladó email címe, tárgy, szövegtörzs.
Fontos: a CDO, ha nem sikerül azonnal küldenie, néhány tucat másodpercig is leblokkolhatja a program felületét. Különösen igaz ez arra az esetre, ha talál olyan szervert, amit megfelelőnek vél, de az mégsem reagál.

Ha a rendszergazdák a teszt programmal való próbálkozás során megtalálják azt az opció halmazt, amivel akár befelé, akár kifelé sikeresen küldhetnek, úgy azt mi a Scroll programok adatbázisába be tudjuk jegyezni. Enélkül a "Napi jelentés" vagy az "Email küldés" ütemezett feladatai nem fogják tudni célba juttatni az adatbázisban tárolt értesítéseket/leveleket/jelentéseket.

A hibákról és elhárításukról

Fontos tudni, hogy a beállítások változhatnak. Lejárhat a jelszó, átalakulhat a környezet (email szerver címe, elhelyezkedése, hitelesítési metódusa, stb.), bekerülhetnek olyan védelmek (tűzfal, aktív eszköz), amelyeken a CDO könyvtár nem tudja keresztül juttatni a leveleket.
Ezt az elmaradó napi jelentések, és el nem küldött leveleket jelzik. Ilyen esetben mindig az ütemezett feladat napló lehet a segítségünkre, amelyben szerepel a hibaüzenet (természetesen csak akkor, ha lefutott a feladat).
Minta:

2015-01-23 12:11:36>> Levélküldési paraméterek beállítása.
2015-01-23 12:11:36>> Levél küldése.
2015-01-23 12:11:36>> #HIBA>>> Levél küldési hiba: . A hibaüzenet: Die Verbindung des Transports zum Server wurde unterbrochen

Sajnos a CDO hibaüzenetei nem túl beszédesek, ennek egyik oka, hogy a levelező szerverig vezető úton sok buktató lehet.
Ám számítani kell rá, hogy egy "Transport failed" üzenet nem csak azt jelenti, hogy nem sikerül célba juttatni a csomagokat, hanem akár hitelesítési hibát is takarhat (nem megfelelő név vagy jelszó).
Ugyanígy gondot jelent, hogy a protokoll nem különbözteti meg a cél szerver elérhetetlenségét és a levelező szolgáltatás meglétének hiányát.
Minél komplikáltabb a rendszer, minél több védelmet tartalmaz, annál több esély van arra, hogy a küldés meghiúsul egy-egy összetevőn beállításain.

A küldés során felmerülő akadályokat a rendszergazdának kell elhárítani, mi csak tippeket tudunk adni az eddigi tapasztalatok alapján:
 

  • Nem megfelelő port és vagy protokoll. Van olyan hely, ahol 25-ös port szerepel, SSL-el párosítva, van, ahol a port el van tolva (2525).   
  • Lejárt / megváltozott / hibás jelszó. Esetleg eltérő a felhasználó és email küldési jelszó. A jelszó legyen fix, és lehetőleg sose járjon le.  
  • A felhasználó nem engedélyezett (vagy csak adott tartományon belül)   
  • A felhasználó email címe nem volt külön megadva (Exchange/A. D.), vagy nem egyezik
  • A konnektor portja nem egyezik, vagy SLL hiánya / megléte, esetleges port titkosítás vagy rejtés (csomagszűrő)   
  • A szerverhez nem IP címmel, hanem csak névvel lehet megfelelően csatlakozni (pl. mail.xy.hu <> 192.168.33.1)   
  • A konnektor csak befelé forgalmaz (SPAM védelem miatt)   
  • Tűzfalak, szegmensek, alhálózatok, NAT, vagy egyéb védelmek (vírusirtó blokkolás, SPAM filter)
  • A relay nem volt lehetséges a felhasználó által
  • A bejelentkezést nem sikerül megoldani (anonymous módként működhet csak)   
  • A megadott címről máshova lyukad ki a csomag, mint ahova szánva lett (IMAP / POP3 elérhetőséget kaptunk)
  • Nagy- és kisbetűk érzékenysége (Linux mail server)
  • Nagyon speciális felhasználói nevek (amik eltérnek az email címtől)


Egy rendszergazda megjegyzései alapján való kiegészítés:

  • A Scroll szerver és az Exchange külön LAN szegmensen van és a kettő között egy védett csatorna (pl. IPsec VPN)
  • Routerek közötti SMTP szűrés
  • NAT beállítások
  • TCP-MSS paraméter gond (fragmentáció)
  • IPSec és egyéb csatornák

Sok egyéb lehetőség is elképzelhető.
Mivel a rendszerekhez érkező frissítések, foltozó csomagok és egyéb változtatások új opciókat jelenthetnek, minden ilyen futtatása után érdemes figyelni a rendszer stabilitását.

Fontos megjegyzés:
A levelező hitelesítések ismételt és folyamatos elutasítása, azok újraküldése érzékenyebb szervereken (pl. Active Directory) kiszolgálási gondokat okozhat nagyon összetett védelmek esetében.

 

Tesztelés

A CDO_Teszter program innen tölthető le:
    [ide kerül majd]

Vagy az alábbi minta programot lehet VBScript nyelven futtatni a teszthez (http://www.paulsadowski.com/wsh/cdo.htm), megfelelően paraméterezve:

Const cdoSendUsingPickup = 1 'Send message using the local SMTP service pickup directory.
Const cdoSendUsingPort = 2 'Send the message using the network (SMTP over the network).

Const cdoAnonymous = 0 'Do not authenticate
Const cdoBasic = 1 'basic (clear-text) authentication
Const cdoNTLM = 2 'NTLM

Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Example CDO Message"
objMessage.From = """Me"" <me@my.com>"
objMessage.To = "test@paulsadowski.com"
objMessage.TextBody = "This is some sample message text.." & vbCRLF & "It was sent using SMTP authentication."

'==This section provides the configuration information for the remote SMTP server.

objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

'Name or IP of Remote SMTP Server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.your.com"

'Type of authentication, NONE, Basic (Base64 encoded), NTLM
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic

'Your UserID on the SMTP server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusername") = "youruserid"

'Your password on the SMTP server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "yourpassword"

'Server port (typically 25)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25

'Use SSL for the connection (False or True)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False

'Connection Timeout in seconds (the maximum time CDO will try to establish a connection to the SMTP server)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60

objMessage.Configuration.Fields.Update

'==End remote SMTP server configuration section==

objMessage.Send